import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'


import login from '@/views/login/index.vue'
import pathError from '@/views/error/pathError.vue'

//引入动态路由
import dynamicRoutes from './dynamicRoutes'

//layout布局
import layoutIndex from '@/layout/index.vue'

//默认路由，所有用户共享
const routes = [
  {
    path: '/',
    name: 'admin',//注意name，如果想要默认访问主页，需要要设置/,否则跳转404
    component: layoutIndex,
  },
  {
    path: '/login',
    name: 'login',
    component: login,
    meta: {
      title: '登录'
    }
  },
  {
    path: '/:pathMatch(.*)*',
    name: 'pathError',
    component: pathError
  }
]

export const router = createRouter({
  history: createWebHistory(),
  routes
})

//动态接收路由
export function addRoutes(menus) {
  //是否有新路由
  let newRoutes=false
  const findRoutes = (arr) => {
    // console.log("arr: ",arr)

    arr.forEach(a => {
      let item={}
      //将预制的动态路由与传入的更新路由list进行匹配
      if(a.children && a.children.length > 0){
        a.children.map(aItem=>{
          item = dynamicRoutes.find(rout => rout.path == aItem.pcPath)
        })
      }else{
        item = dynamicRoutes.find(rout => rout.path == a.pcPath)
      }
      
      //判断路由是否存在，并且已经注册（hasRoute必须要求路由有一个name），取反：没有注册这个路由
      // console.log("item: ",item)
      if (item && !router.hasRoute(item.path)) {
        /**
         * router4.0之后没有批量添加路由，只能单个添加
         * 1.需要都添加到name=admin（layout布局）的子路由，添加嵌套路由，添加嵌套路由需要指定父级路由的name
         * 2.存在刷新路由丢失问题,需要指定newRoutes返回fullPath，是否走next{to.fullPath}
         * 3.addRoute是通过router.push来注册的，如果是刷新，没有push就无法进入到指定路由
         */
        router.addRoute("admin", item)
        newRoutes=true
      }
      //如果存在子菜单,再次递归添加
      if (a.children && a.children.length > 0) {
        findRoutes(a.children)
      }
    });
  }

  findRoutes(menus)
  // console.log("动态路由获取：", router.getRoutes())
  //返回是否有新路由，如果有permission的next改为fullPath
  return newRoutes
}